using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

using Tao.OpenGl;

namespace tp2
{
    public class PuntoDeControl
    {
        private float _x;
        private float _y;

        public float X
        {
            get { return _x; }
            set { _x = value; }
        }

        public float Y
        {
            get { return _y; }
            set { _y = value; }
        }

        public PuntoDeControl(float x, float y)
        {
            _x = x;
            _y = y;
        }

        public void dibujar()
        {
            Gl.glDisable(Gl.GL_LIGHTING);
            ColorTP.GlColor(Color.DarkRed);
            Gl.glBegin(Gl.GL_POLYGON);
            Gl.glVertex2f(_x - 0.01f, _y + 0.01f);
            Gl.glVertex2f(_x + 0.01f, _y + 0.01f);
            Gl.glVertex2f(_x + 0.01f, _y - 0.01f);
            Gl.glVertex2f(_x - 0.01f, _y - 0.01f);
            Gl.glEnd();
            Gl.glEnable(Gl.GL_LIGHTING);
        }

        internal static Matriz ToArray(List<PuntoDeControl> puntosDeControl)
        {
            Matriz puntos = new Matriz(4, 2);
            for (int i = 0; i < 4; i++)
            {
                puntos[i, 0] = puntosDeControl[i].X;
                puntos[i, 1] = puntosDeControl[i].Y;
            }
            return puntos;
        }

        public bool HitTest(float x, float y)
        {
            if (x > X - 0.012 && x < X + 0.012 && y < Y + 0.012 && y > Y - 0.012)
            {
                return true;
            }
            return false;
        }

        public static PuntoDeControl operator -(PuntoDeControl punto1, PuntoDeControl punto2)
        {
            return new PuntoDeControl(punto1.X - punto2.X, punto1.Y - punto2.Y);
        }

        public static PuntoDeControl operator +(PuntoDeControl punto1, PuntoDeControl punto2)
        {
            return new PuntoDeControl(punto1.X + punto2.X, punto1.Y + punto2.Y);
        }

        public static PuntoDeControl operator *(float escalar, PuntoDeControl punto)
        {
            return new PuntoDeControl(escalar * punto.X, escalar * punto.Y);
        }

    }
}
